<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        var a = true;
        a = !a; // 非运算  : 对布尔值进行取反操作  ； 对非布尔值，先将值转成布尔值再取反操作
        console.log(a); //false
        a = "xyz";
        a = !a;
        console.log(a); //false

        a = !!a; // 两次取反操作，可以将任意值转成布尔值

        var b = false && false; // &&（或）： 两侧都为true，才为true
        b = true && alert("abc"); // 第一个值为true, 才会检查第二个值
        console.log(b);

        // || （与） : 两个都为false ，才为false； 只要有一个为true ，就返回true
        //  只要第一个为true, 则不会检查第二个
        var c = false || true;
        console.log(c); // true  :  


        // 非布尔值进行 与或运算，会先将其转成布尔值
        var d = 5 && 6;
        console.log(d); // 6   两个都为true ，d的值为后面一个

        d = 0 && 4; // 0
        d = NaN && 0 // NaN
        d = 0 && NaN // 0
        console.log(d); // 两个都为false ，返回靠前的false

        var e = true || NaN // true   第一个值为true ，则返回true
        e = NaN || true // true   第一个值为false，则返回第二个
    </script>
</body>

</html>